<html>
<head>
<BASE HREF="http://metamorph0sis.nm.ru/xmeffects.html">

<meta name="generator" contents="hands/mcedit">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>XM effects comprehensive help</title>
</head>
<body bgcolor="black" text="#f0d79c">
<h2 align="center"><font color="cyan">
XM Effects Comprehensive Help
</font></h2>
<p>Abbreviations: ST means SoundTracker, FT2 &mdash; Fasttracker V.2.
<p>FT2 (and hence ST) has a separate track column for effects. Some widely-used effects can also
be implemented using volume column.
<br>
<h3>Effects placed in the effects column</h3>
<p>The effects in FT2 (and also ST) are being written in three fields: first (number or letter)
means effect type, second and third &mdash; effect parameter(s). Effects may have one parameter
with the byte lenght or two with nibble lengths. In this table the first case is denoted as
&quot;xx&quot; after the effect type, the second &mdash; as &quot;xy&quot;. For instance, 1xx is
the one-parameter effect, and 0xy &mdash; two-parameters one.
<br>
<table border="2" width="100%">
<tr>
    <td align="center">
    <font color="gold"><b>Mnemonic</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Name</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Parameter(s)</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Description</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Comments</b></font>
    </td>
</tr>
<tr><td colspan="5" align="center"><b>Standard FT2 effects</b></td></tr>
<tr>
    <td align="center">0xy</td>
    <td>Arpegio</td>
    <td>1st halftone, 2nd halftone</td>
    <td>First tick the note is played, the next tick &mdash; note + x halftones,
    the next tick &mdash; note + y halftones, then repeat from the beguinning.
    For instance: <i>C-1 037</i>: first is played C1, then C1 + 3 ht = Eb1, then &mdash;
    C1 + 7 ht = G1 and then again C1 and so on...</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">1xx/2xx<sup>*</sup></td>
    <td>Portamento up/down</td>
    <td>Speed</td>
    <td valign="top">This command is used to slide the sample pitch up or down. This is done using the
    speed value. If Amiga frequence table is used, the sliding will be non-linear (the
    speed depends on the frequency).</td>
    <td valign="top">Actually sliding (really tone stepping) is being performed at every tick since
    command is active. So the final tone depends on the &quot;Speed&quot; parameter. This is
    true for all slide/portamento commands.</td>
</tr>
<tr>
    <td align="center">3xx<sup>*</sup></td>
    <td>Tone portanemto</td>
    <td>Speed</td>
    <td valign="top">This command is used together with a note, and will slide to its frequency. If
    glissando mode is set (by <i>E3x</i> command), the frequency will be rounded to the
    nearest halftone</td>
    <td valign="top">ST has some quirk here: the tone stepping is performed at every tick except first.
    So if we use two successive <i>3xx</i> command, during the first tick of the second line
    we'll obtain the same tone as at the last tick of the previous line (no stepping when line
    is changing). So there will be no time-linear portamento, alas :( But this isn't notable
    at normal BPM.</td>
</tr>
<tr>
    <td align="center">4xy<sup>*</sup></td>
    <td>Vibrato</td>
    <td>Rate, depth</td>
    <td>Adds (frequency) vibrato to the channel with a specified rate and speed. Set
    vibrato mode command (<i>E4x</i>) can be used to change the vibrato waveform (see below).</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">5xy<sup>*</sup></td>
    <td>Tone portamento + volume slide</td>
    <td>Up speed, down speed (see volume slide (<i>Axy</i>))</td>
    <td valign="top">This command execute both tone portamento and volume slide. The speed is used for
    the volume slide.</td>
    <td valign="top">The tone portamento speed is being taken from the previous appearance of the tone
    portamento (<i>3xx</i>) effect.</td>
</tr>
<tr>
    <td align="center">6xy<sup>*</sup></td>
    <td>Vibrato + volume slide</td>
    <td>Up speed, down speed (see volume slide (<i>Axy</i>))</td>
    <td valign="top">This command execute both tone portamento and volume slide. The speed is used for
    the volume slide.</td>
    <td valign="top">See comment for <i>5xy</i>.</td>
</tr>
<tr>
    <td align="center">7xy<sup>*</sup></td>
    <td>Tremolo</td>
    <td>Rate, depth</td>
    <td>The same like vibrato (<i>4xy</i>) but affects the sound amplitude rather then the
    frequency.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">8xy</td>
    <td>Set panning position</td>
    <td>Position</td>
    <td>0x00 &mdash; leftmost, 0xff &mdash; rightmost.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">9xx</td>
    <td>Sample offset</td>
    <td>Offset</td>
    <td>This command should be used together with a note. The sample will be played from
    (offset * 0x100) instead of zero.
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Axy<sup>*</sup></td>
    <td>Volume slide</td>
    <td>Up speed, down speed</td>
    <td>Slides the current volume up or down. Either up speed or down speed should be zero</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Bxx</td>
    <td>Position jump</td>
    <td>Position</td>
    <td>This command will cause jump to the selected song postion and play pattern from the
    beginning</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Cxx</td>
    <td>Set volume</td>
    <td>Volume</td>
    <td>Sets the current volume of the track where the command is, just like volume column.
    The volume should not be greater than 0x40</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Dxx</td>
    <td>Pattern break</td>
    <td>Pattern position</td>
    <td>This command will cause jump to the next pattern and play from the selected
    position</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E0x</td>
    <td>Set filter mode (Amiga only)</td>
    <td>Mode</td>
    <td>I don't have Amiga so I can say nothing about how this command works.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E1x/E2x<sup>*</sup></td>
    <td>Fine portamento up/down</td>
    <td>Speed</td>
    <td>This command works as portamento up/down, but the sliding occurs only one
    time per line.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E3x</td>
    <td>Set glissando mode</td>
    <td>Mode</td>
    <td>If mode = 1, the resulting frequency after implementing this command will be
    rounded to the nearest halftone.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E4x</td>
    <td>Set vibrato mode</td>
    <td>Mode</td>
    <td>Mode: 0 &mdash; sine, 1 &mdash; ramp down, 2 &mdash; square. If you add 4 to the
    mode, the waveform will not be retrigged when a new instrument is played</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E5x</td>
    <td>Set fine-tune</td>
    <td>Tune</td>
    <td>This command should be used together with a note. It will cause another fine-tune
    value to be used.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E6x</td>
    <td>Pattern loop</td>
    <td>Count</td>
    <td>If count is zero, the beginning of the loop will be specified. When a non-zero
    value is used, the pattern will be looped from a loop start by a given number of times.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E7x</td>
    <td>Set tremolo mode</td>
    <td>Mode</td>
    <td>See <i>E4x</i> (set vibrato control), but for the tremolo waveform.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">E9x</td>
    <td>Retrig note</td>
    <td>Interval</td>
    <td valign="top">Retrigs note with the specified interval.</td>
    <td valign="top">Realization of this command in ST (v.&nbsp;&lt;=&nbsp;0.6.8) has a
    <font color="red"><b>bug</b></font>: effect is not working when
    <i>BPM</i> / 53 &lt; <i>Interval</i>, the effect is not working.</td>
</tr>
<tr>
    <td align="center">EAx/EBx<sup>*</sup></td>
    <td>Fine volume slide up/down</td>
    <td>Speed</td>
    <td>This command works as usual volume slide up/down, but the sliding occurs only one
    time per line.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">ECx</td>
    <td>Note cut</td>
    <td>Tick</td>
    <td valign="top">Cut the note at the specified tick. Note that it will only set the volume to zero,
    and the sample will still be played.</td>
    <td valign="top"><i>EC0</i> combination doesn't work in ST. But hopefully its rather useless, 'cause
    it can be replaced by simply setting volume to zero.</td>
</tr>
<tr>
    <td align="center">EDx</td>
    <td>Note delay</td>
    <td>Ticks</td>
    <td>This command will delay the note by the selected number of ticks.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">EEx</td>
    <td>Pattern delay</td>
    <td>Lines</td>
    <td valign="top">This command will delay pattern by the selected number of tracker lines</td>
    <td valign="top">Realization of this command in ST is extremly <font color="red"><b>buggy</b></font>.
    The delay produced by
    it is right, but: 1) just before the pause, in the place where this
    command is met, the note in the track where the command is, is played nevertheless;
    2) other notes placed in the same line as <i>EEx</i> command will not be played after
    the pause left.</td>
</tr>
<tr>
    <td align="center">Fxx</td>
    <td>Set speed</td>
    <td>Speed or BPM</td>
    <td>This command will set the speed or BPM value of the song. If value is less than
    0x20, the speed will be changed. Othervise, the BPM value will be changed.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Gxx</td>
    <td>Set glibal volume</td>
    <td>Volume</td>
    <td valign="top">Sets the global volume. The value should not exceed 0x40.</td>
    <td valign="top">In ST valuse greater than 0x40 work as they would be equal to 0x40.</td>
</tr>
<tr>
    <td align="center">Hxy<sup>*</sup></td>
    <td>Global volume slide</td>
    <td>Up speed, down speed</td>
    <td>Works exactly as volume slide, but it slides the global volume instead.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Lxx</td>
    <td>Set envelope position</td>
    <td>Position</td>
    <td>Changes the envelope position (measured in ticks, as in the instrument editor).</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Pxy</td>
    <td>Panning slide</td>
    <td>Right speed, left speed</td>
    <td>Slides the panning position. Works like the volume slide.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">Rxy<sup>*</sup></td>
    <td>Extended retrig</td>
    <td>Volume change, interval</td>
    <td valign="top">This is an extended version of the retrig command. Volume is changed according
    to the following table:
    <br><table border="0">
	<tr><td>0&nbsp;</td><td>None</td><td>&nbsp;&nbsp;&nbsp;</td><td>8&nbsp;</td><td>Unused</td></tr>
	<tr><td>1</td><td>-1</td><td></td><td>9</td><td>+1</td></tr>
	<tr><td>2</td><td>-2</td><td></td><td>A</td><td>+2</td></tr>
	<tr><td>3</td><td>-4</td><td></td><td>B</td><td>+4</td></tr>
	<tr><td>4</td><td>-8</td><td></td><td>C</td><td>+8</td></tr>
	<tr><td>5</td><td>-16</td><td></td><td>D</td><td>+16</td></tr>
	<tr><td>6</td><td>*2/3</td><td></td><td>E</td><td>*3/2</td></tr>
	<tr><td>7</td><td>*1/2</td><td></td><td>F</td><td>*2</td></tr>
    </table></td>
    <td valign="top">Realization of this effect in FT2 has the <b><font color="red">bug</font></b>: the
    first repeat is appeared not after at the tick set by <i>interval</i>, but at the
    <i>interval</i> - 1 tick (and then the note is played at 2 * <i>interval</i> - 1,
    3 * <i>interval</i> - 1 tick and so on. ST realization of this effect has the same
    <b><font color="red">bug</font></b> as <i>E9x</i> effect, so it's hardly to trace, whether
    its behavior copies that of FT2 or not.</td>
</tr>
<tr>
    <td align="center">Txy</td>
    <td>Tremor</td>
    <td> On time, off time</td>
    <td> This effect will set the volume to zero during <i>off time</i> number of ticks, and
    then restore the volume back during <i>ofn time</i> number of ticks.</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td align="center">X1x/X2x<sup>*<sup></td>
    <td>Extra fine portamento up/down</td>
    <td>Speed</td>
    <td>Works like fine portamento up/down, but the speed will be divided by four.</td>
    <td>&nbsp;</td>
</tr>
<tr><td colspan="5" align="center"><b>Extended effects (ST only)</b></td></tr>
<tr>
    <td align="center">Zxx</td>
    <td>LP filter cutoff</td>
    <td>Frequency</td>
    <td>This will set the cutoff frequency of the lowpass filter.</td>
    <td rowspan="2" valign="center">To switch off the filter, you must use <i>Zff</i>
    <b>and</b> <i>Q00</i>.</td>
</tr>
<tr>
    <td align="center">Qxx</td>
    <td>LP filter quality</td>
    <td>Quality</td>
    <td>This will set the quality (resonance) of the lowpass filter.</td>
</tr>
<table>
<font size="-1">Notes:<br>
* If the data byte is zero, the last nonzero byte for the command will be used.</font>
<br>
<h3>Effects in the volume column</h3>
<p> &quot;x&quot; in the name column means parameter.
<br>
<table border="2">
<tr>
    <td align="center">
    <font color="gold"><b>Volume</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Name</b></font>
    </td>
    <td align="center">
    <font color="gold"><b>Analogic effect in the effect column</b></font>
    </td>
</tr>
<tr>
    <td align="center">0x</td>
    <td>Nothing</td>
    <td align="center">&mdash;</td>
</tr>
<tr>
    <td align="center">10 - 50</td>
    <td>Set volume <i>Value</i> - 0x10</td>
    <td align="center">&mdash;</td>
</tr>
<tr>
    <td align="center">6x</td>
    <td>Volume slide down</td>
    <td align="center">A0x</td>
</tr>
<tr>
    <td align="center">7x</td>
    <td>Volume slide up</td>
    <td align="center">Ax0</td>
</tr>
<tr>
    <td align="center">8x</td>
    <td>Fine volume slide down</td>
    <td align="center">EBx</td>
</tr>
<tr>
    <td align="center">9x</td>
    <td>Fine volume slide up</td>
    <td align="center">EAx</td>
</tr>
<tr>
    <td align="center">ax</td>
    <td>Set vibrato speed</td>
    <td align="center">One half of 4xy</td>
</tr>
<tr>
    <td align="center">bx</td>
    <td>Vibrato, the parameter is the depth.</td>
    <td align="center">Second half of 4xy</td>
</tr>
<tr>
    <td align="center">cx</td>
    <td>Set panning</td>
    <td align="center">8x0</td>
</tr>
<tr>
    <td align="center">dx</td>
    <td>Panning slide left</td>
    <td align="center">P0x</td>
</tr>
<tr>
    <td align="center">ex</td>
    <td>Panning slide right</td>
    <td align="center">Px0</td>
</tr>
<tr>
    <td align="center">fx</td>
    <td>Tone porta</td>
    <td align="center">3x0</td>
</tr>
</table>
<h3>Some more XM features</h3>
<p>XM format also contains some features which are actually not effects, but often cause
misunderstanding. First, one should remember that each pattern line is divided into some
<i>ticks</i>. The number of ticks per line is set by &quot;Speed&quot; parameter. The number
of processed ticks per second is determined by &quot;BPM&quot; parameter according to the
formula: <i>ticks&nbsp;per&nbsp;second</i>&nbsp;=&nbsp;<i>BPM</i>&nbsp;*&nbsp;2&nbsp;/&nbsp;5.

<p>In the instrument editor: One time unit in the volume envelope is equal to one tick. The
&quot;Fadeout&quot; parameter determines the time of the sound decay after the key will be
released. ST has the following strangeness here: in the editing mode the fadeout is implemented
independently on the volume envelope. But while the module playing the fadeout acts only if the
volume envelope is turned on.

<p>Frequency table: if the linear table is selected, the frequency shift will be performed at
the constant speed independently on the current frequency.
<br>
<p>This document is composed using xm.txt file, FT2 embedded help, ST cheat sheet and my own
experience.
<p><i><center>(C) Yury Aliaev 2006. Distributed under the terms of GNU FDL.</center></i>
</body>
<SCRIPT language="Javascript">
<!--

// FILE ARCHIVED ON 20060816085429 AND RETRIEVED FROM THE
// INTERNET ARCHIVE ON 20080128225314.
// JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
// ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
// SECTION 108(a)(3)).

   var sWayBackCGI = "http://web.archive.org/web/20060816085429/";

   function xResolveUrl(url) {
      var image = new Image();
      image.src = url;
      return image.src;
   }
   function xLateUrl(aCollection, sProp) {
      var i = 0;
      for(i = 0; i < aCollection.length; i++) {
         if (typeof(aCollection[i][sProp]) == "string") { 
          if (aCollection[i][sProp].indexOf("mailto:") == -1 &&
             aCollection[i][sProp].indexOf("javascript:") == -1) {
            if(aCollection[i][sProp].indexOf("http") == 0) {
                aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp];
            } else {
                aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]);
            }
         }
         }
      }
   }

   xLateUrl(document.getElementsByTagName("IMG"),"src");
   xLateUrl(document.getElementsByTagName("A"),"href");
   xLateUrl(document.getElementsByTagName("AREA"),"href");
   xLateUrl(document.getElementsByTagName("OBJECT"),"codebase");
   xLateUrl(document.getElementsByTagName("OBJECT"),"data");
   xLateUrl(document.getElementsByTagName("APPLET"),"codebase");
   xLateUrl(document.getElementsByTagName("APPLET"),"archive");
   xLateUrl(document.getElementsByTagName("EMBED"),"src");
   xLateUrl(document.getElementsByTagName("BODY"),"background");
   var forms = document.getElementsByTagName("FORM");
   if (forms) {
       var j = 0;
       for (j = 0; j < forms.length; j++) {
              f = forms[j];
              if (typeof(f.action)  == "string") {
                 if(typeof(f.method)  == "string") {
                     if(typeof(f.method) != "post") {
                        f.action = sWayBackCGI + f.action;
                     }
                  }
              }
        }
    }


//-->
</SCRIPT>

</html><br><br><br>
<div align="center">
<table width="468" height="60" cellspacing="0" cellpadding="0" style="border: 1 solid #A3A5A8;">

<tr><td align="center">

    <a href="http://www.nm.ru/users/reg.dhtml" target="_blank" style="display:block; margin:0px"><img src="http://newmail.ru/hosting/hosting_newmail.gif" width="468" height="60" border="0"></a>

</td></tr>

<FORM NAME="regform" ACTION="http://www.nm.ru/users/reg.dhtml" target="_blank" METHOD="GET" >
<tr><td align="center" valign="middle" width="468" height="40" style="background: url(http://newmail.ru/hosting/hosting_newmail_down.gif) repeat-x;">    
        
<input type="hidden" name="rid" value="hosting">
        <input type="text" name="login" id="login" value="" maxlength="20" size="21" style="border: 1px solid #A3A5A8; background-color: #FFFFFF; font-size: 12px; width: 150px; height:17px; margin-bottom:2px">
	<select name="domain" style="border: 1px solid #A3A5A8; background-color: #FFFFFF; font-size: 12px; height:16px;" >
            <option value="newmail.ru" >newmail.ru</option>
            <option value="hotmail.ru" >hotmail.ru</option>
            <option value="nm.ru" >nm.ru</option>
            <option value="nightmail.ru" >nightmail.ru</option>
        </select>
        <input type="submit" value="&raquo;&raquo;&raquo;" style="border:white 1px solid; background: url(http://newmail.ru/hosting/hosting_newmail_button.gif) ; font:bold 14px arial; color:white; height:21px; width:120px; cursor:pointer">
   

</td></tr>
 </form>


</table>
</div>

<script language="javascript"><!--skip ();
u="count.rbc.ru/p429.gif";d=document;nv=navigator;na=nv.appName;p=0;j="N";
n=(na.substring(0,2)=="Mi")?0:1;y="";
y+="<img src='http://"+u+"?r="+d.referrer+"&width="+screen.width+"&height="+screen.height+"&hash="+d.location.hash.substr(1)+"&rf="+parent.document.referrer+"&rn="+Math.random();
y+="' border=0 width=1 height=1 alt='count'>";
d.write(y);if(!n) { d.write("<"+"!--"); }//--></script><noscript>
<img src="http://count.rbc.ru/p429.gif" alt='count' border=0 width=1 height=1 >
</noscript><script language="javascript1.2"><!--skip ();
if(!n) { d.write("--"+">"); }//--></script>
<a href="http://www.seall.ru/kino/"><img src="http://newmail.ru/forms/images/sp88_2.gif" width="88" height="2" border="0"></a>
